package dsn

// 连接池配置
type ConnectionPool struct {
	MaxOpenConn     int  `default:"100" comment:"最大连接数"`
	MaxIdleConn     int  `default:"10" comment:"最大空闲连接数，必须要比MaxOpenConn小"`
	ConnMaxLifetime uint `default:"0" comment:"连接最大存活时长，必需要比mysql服务器设置wait_timeout小，wait_timeout默认是8 hour"`
}

// 数据库配置
type MysqlConfig struct {
	Connection     string `default:"default"`
	Host           string
	Port           string `default:"3306"`
	User           string
	Pass           string
	DbName         string
	Charset        string `default:"utf8mb4"`
	Dsn            string
	SingularTable  bool `default:"true" comment:"是否去掉复数表名"`
	LogMode        int  `default:"0" comment:"是否开启日志 1开启，0关闭， true/false"`
	ConnectionPool ConnectionPool
}

func MysqlCfg() *MysqlConfig {
	cPool := ConnectionPool{
		MaxOpenConn:     100,
		MaxIdleConn:     10,
		ConnMaxLifetime: 0,
	}
	cfg := MysqlConfig{
		Connection:     "default",
		Port:           "3306",
		Charset:        "utf8mb4",
		SingularTable:  true,
		LogMode:        0,
		ConnectionPool: cPool,
	}
	return &cfg
}

func (d *MysqlConfig) GetDsn() string {
	return d.Dsn
}

func (d *MysqlConfig) SetDsn(dsn string) IConfig {
	d.Dsn = dsn
	return d
}

func (d *MysqlConfig) Init(host, port, dbName, user, pass, charset string) *MysqlConfig {
	d.Host = host
	d.Port = port
	d.DbName = dbName
	d.User = user
	d.Pass = pass
	d.Charset = charset
	return d
}

func (d *MysqlConfig) SetConnection(connection string) *MysqlConfig {
	d.Connection = connection
	return d
}

/**
MySQL默认使用的时间 ： 美国 东 8 区 时间 。 —— 北京时间 —— 差 8 小时。
在连接数据库时，添加属性：?parseTime=True&loc=Local
conn, err := gorm.Open("mysql”,"root:123456@tcp(127.0.0.1:3306)/test?parseTime=True&loc=Local")
*/
